﻿using H.Types;
using System;

namespace H.Eyes
{
    /// <summary>
    /// 表示一个图像识别插件实例
    /// </summary>
    public interface IEye : IDisposable
    {
        /// <summary>
        /// 读取或设置默认选项
        /// </summary>
        IEyeOption DefaultOption { get; }

        /// <summary>
        /// 创建一个可选项配置
        /// </summary>
        /// <returns>返回一个可选项的新实例</returns>
        IEyeOption CreateOption();

        /// <summary>
        /// 设置匹配源(默认是从屏幕截图后进行匹配)
        /// 注意: 匹配结束后,需要手动传入display=null来设置使用屏幕截图进行匹配
        /// </summary>
        /// <param name="display">传入需要被匹配的图片</param>
        bool SetDisplay(byte[] display = null);


        /// <summary>
        /// 生成一个使用默认参数查找指定图片的任务实例
        /// </summary>
        /// <param name="imgs">需要查找的图片的实例</param>
        /// <returns>返回一个找图任务实例</returns>
        ISee FindPic(params IImgEntity[] imgs);

        /// <summary>
        /// 生成一个查找指定图片的任务实例
        /// </summary>
        /// <param name="option">额外的查找参数,这些参数的字段要以实际加载的驱动为准</param>
        /// <param name="imgs">需要查找的图片的实例</param>
        /// <returns>返回一个找图任务实例</returns>
        ISee FindPic(IEyeOption option, params IImgEntity[] imgs);

        /// <summary>
        /// 生成一个使用默认参数查找指定图片的基点的任务实例
        /// </summary>
        /// <param name="imgs">需要查找的图片的实例</param>
        /// <returns>返回一个找图任务实例</returns>
        ISee FindPicB(params IImgEntity[] imgs);

        /// <summary>
        /// 生成一个查找指定图片的基点的任务实例
        /// </summary>
        /// <param name="option">额外的查找参数,这些参数的字段要以实际加载的驱动为准</param>
        /// <param name="imgs">需要查找的图片的实例</param>
        /// <returns>返回一个找图任务实例</returns>
        ISee FindPicB(IEyeOption option, params IImgEntity[] imgs);

        /// <summary>
        /// 生成一个使用默认参数查找指定颜色的任务实例
        /// </summary>
        /// <param name="colors">希望查找的所有颜色</param>
        /// <returns>返回一个找图任务实例</returns>
        ISee FindColor(params RGB[] colors);

        /// <summary>
        /// 生成一个查找指定颜色的任务实例
        /// </summary>
        /// <param name="colors">希望查找的所有颜色</param>
        /// <param name="option">额外的查找参数,这些参数的字段要以实际加载的驱动为准</param>
        /// <returns>返回一个找图任务实例</returns>
        ISee FindColor(IEyeOption option, params RGB[] colors);

    }
}
